Buffers are generally used to store data on a temporary basis. For example, as a computing device receives data from a computer network, the computing device may store the received data in a buffer. The stored data may later be retrieved for processing or transmission. Some computing devices have access to a limited amount of storage that may be utilized as a buffer.
Generally, a buffer may have a fixed size or a size that is configurable at programming time. As data traffic rates may be unpredictable, one buffer may be filled up more quickly than other buffers. In case of fixed size buffers, larger buffer sizes may be assigned during hardware design stage, but this may be an inefficient use of available resources such as silicon real-estate. For buffers that are configurable at programming time, the computing device may need to be reprogrammed (or reset) before the new buffer sizes can take effect. This may result in loss of data or halting of current operations that are pending execution on the computing device.